package com.gitee.lougnib.simple.lang.util;

import java.text.ParseException;
import java.time.LocalDateTime;
import java.util.Date;

import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.time.DateUtils;

/**
 * 系统时间相关的工具类。
 *
 * @author lougnib@163.com
 * @since 2021/08/09
 * @version 2021/08/09
 */
public class SystemTimeUtils {

	public static final String DEFAULT_CURRENT_TIME = "now";

	// TODO 优化日期格式的解析
	private static String currentTime = DEFAULT_CURRENT_TIME;

	/**
	 * 设定当前的系统时间。
	 * 如果是固定的系统时间，要求的格式是 yyyy-MM-dd'T'HH:mm:ss。
	 * 设定固定的系统时间通常只用于测试阶段。
	 *
	 * @param currentTime 当前时间
	 */
	public static void setCurrentTime(String currentTime) {
		SystemTimeUtils.currentTime = currentTime;
	}

	/**
	 * 取得当前的系统时间。
	 *
	 * @return 当前的系统时间
	 */
	public static LocalDateTime getCurrentTime() {
		if (DEFAULT_CURRENT_TIME.equals(currentTime) || StringUtils.isEmpty(currentTime)) {
			return LocalDateTime.now();
		}

		return LocalDateTime.parse(currentTime);
	}

	/**
	 * 取得 Date 类型的当前的系统时间。
	 *
	 * @return Date 类型的当前的系统时间
	 */
	public static Date getCurrentTimeAsDate() {
		if (DEFAULT_CURRENT_TIME.equals(currentTime) || StringUtils.isEmpty(currentTime)) {
			return new Date();
		}

		try {
			return DateUtils.parseDateStrictly(currentTime, "yyyy-MM-dd'T'HH:mm:ss");
		} catch (ParseException e) {
			return new Date();
		}
	}

}
